-- search_key
-- Created by chengb Feb/7/2015 
-- 寻找钥匙

-- 内部函数声明
local whenOpenDoor;

-- 关注地牢中门开启的事件
EventMgr.register("task/search_key", event.OPEN_DOOR, function(args)
    whenOpenDoor();
end);

-- 没开启的回调
whenOpenDoor = function()
    -- 玩家不在地牢中
    if not DungeonM.isInDungeon() then
        return;
    end

    -- 获取当前所在的地牢层
    local layer = DungeonM.currentLayer();

    -- 获取当前所在的地牢区域
    local area = DungeonM.getDungeonId();

    -- 获取本规则对应的所有任务
    local taskList = TaskM.getTasksByRule("search_key");
    if type(taskList) ~= "table" or #taskList <=0 then
        return;
    end

    -- 判断是否是符合要求的任务
    local function isValidTask(info)
        local taskId = info["id"];

        if info["area"] ~= area then
            -- 非当前区域的任务
            return false;
        end
        if info["rule_args"]["layer"] ~= layer then
            -- 不是需求层
            return false;
        end                  
        if TaskM.isFinished(taskId) then
            -- 已完成
            return false;
        end    

        local progress = TaskM.getProgress(taskId);
        if progress < 0 then
            -- 未领取
            return false;
        end

        return true;
    end

    for _, info in pairs(taskList) do
        local taskId = info["id"];
        local progress = TaskM.getProgress(taskId);

        if isValidTask(info) then
            -- 如果是符合条件的任务，更新进度
            TaskM.setProgress(taskId, progress + 1);
        end
    end
end

return {    
    -- 获取任务描述
    getTaskDesc = function(taskId)
        local descFormat = TaskM.query(taskId, "desc");
        local layer = TaskM.query(taskId, "rule_args")["layer"];
        return string.format(descFormat, layer);
    end,
    
    -- 获取任务日志
    getTaskLog = function(taskId)
        return AreaTaskM.getTaskLog(taskId);
    end
};
